package com.redepronik.negosysdis.invfac.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.event.ActionEvent;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;

import com.redepronik.negosys.invfac.entity.Bodega;
import com.redepronik.negosys.invfac.entity.Grupo;
import com.redepronik.negosys.invfac.entity.Producto;
import com.redepronik.negosys.invfac.entityAux.KardexReporte;
import com.redepronik.negosys.invfac.service.BodegaService;
import com.redepronik.negosys.invfac.service.GrupoService;
import com.redepronik.negosys.invfac.service.KardexService;
import com.redepronik.negosys.invfac.service.ProductoService;
import com.redepronik.negosys.utils.service.ReporteService;

@Controller
@Scope("session")
public class KardexBean {

	@Autowired
	private ProductoService productoService;

	@Autowired
	private BodegaService bodegaService;

	@Autowired
	private KardexService kardexService;

	@Autowired
	private GrupoService grupoService;

	@Autowired
	ReporteService reporteService;

	private List<KardexReporte> listaKardexReporte;

	private Producto producto;
	private Producto productoAux;

	private Date fechaInicio;
	private Date fechaFinal;

	private List<Bodega> listaBodegas;
	private Bodega bodega;
	private boolean bnBodega;

	private List<Producto> listaProductos;
	private List<Grupo> listaGrupos;
	private String criterioBusqueda;
	private Grupo grupo;

	public KardexBean() {
	}

	public void cargarKardex() {
		listaKardexReporte = kardexService.generarkardex(producto, fechaInicio,
				fechaFinal, bodega);
		if (listaKardexReporte != null && listaKardexReporte.size() > 0) {
			productoAux = producto;
			producto = new Producto();
			if (listaBodegas.size() == 1) {
				bodega.setBodegaid(listaBodegas.get(0).getBodegaid());
				bnBodega = true;
			} else {
				bodega.setBodegaid(0);
			}
		}
	}

	public void imprimirKardex(ActionEvent actionEvent) {
		Map<String, Object> parametros = new HashMap<String, Object>();
		parametros.put("nomPro", productoAux.getNombreimprimir());
		parametros.put("gruPro", productoAux.getGrupo().getNombre());
		parametros.put("canMinPro", productoAux.getCantidadminima());
		reporteService.generarReportePDF(listaKardexReporte, parametros,
				"Kardex");
	}

	public Bodega getBodega() {
		return bodega;
	}

	public String getCriterioBusqueda() {
		return criterioBusqueda;
	}

	public Date getFechaFinal() {
		return fechaFinal;
	}

	public Date getFechaInicio() {
		return fechaInicio;
	}

	public Grupo getGrupo() {
		return grupo;
	}

	public List<Bodega> getListaBodegas() {
		return listaBodegas;
	}

	public List<Grupo> getListaGrupos() {
		return listaGrupos;
	}

	public List<KardexReporte> getListaKardexReporte() {
		return listaKardexReporte;
	}

	public List<Producto> getListaProductos() {
		return listaProductos;
	}

	public Producto getProducto() {
		return producto;
	}

	@PostConstruct
	private void init() {
		listaBodegas = bodegaService.obtenerPorBodeguero(SecurityContextHolder
				.getContext().getAuthentication().getName());
		listaGrupos = grupoService.obtener();
		limpiarObjetos();
	}

	public boolean isBnBodega() {
		return bnBodega;
	}

	public void limpiarObjetos() {
		listaKardexReporte = new ArrayList<KardexReporte>();
		producto = new Producto();
		bodega = new Bodega();
		grupo = new Grupo();
		if (listaBodegas.size() == 1) {
			bodega.setBodegaid(listaBodegas.get(0).getBodegaid());
			bnBodega = true;
		}
	}

	public void obtenerProducto() {
		producto = productoService.obtenerPorProductoId(producto
				.getProductoid());
	}

	public void obtenerProductos() {
		setListaProductos(productoService.obtener(criterioBusqueda,
				grupo.getGrupoid()));
	}

	public void setBnBodega(boolean bnBodega) {
		this.bnBodega = bnBodega;
	}

	public void setBodega(Bodega bodega) {
		this.bodega = bodega;
	}

	public void setCriterioBusqueda(String criterioBusqueda) {
		this.criterioBusqueda = criterioBusqueda;
	}

	public void setFechaFinal(Date fechaFinal) {
		this.fechaFinal = fechaFinal;
	}

	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}

	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	public void setListaBodegas(List<Bodega> listaBodegas) {
		this.listaBodegas = listaBodegas;
	}

	public void setListaGrupos(List<Grupo> listaGrupos) {
		this.listaGrupos = listaGrupos;
	}

	public void setListaKardexReporte(List<KardexReporte> listaKardexReporte) {
		this.listaKardexReporte = listaKardexReporte;
	}

	public void setListaProductos(List<Producto> listaProductos) {
		this.listaProductos = listaProductos;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}

}
